<template>
  <div class="container">
    <van-nav-bar title="搜索中心" left-arrow @click-left="$router.back()" />
    <!-- 搜索框 -->
    <van-search
      v-model="keyWord"
      @search="onSearch"
      shape="round"
      placeholder="请输入搜索关键词"
    />
    <!-- 联想词展示 -->
    <van-cell-group class="suggest-box" v-if="keyWord">
      <!-- span高亮联想关键词 -->
      <van-cell
        @click="onSearch(sug.replace(`<span>${keyWord}</span>`, keyWord))"
        v-for="sug in suggestList"
        :key="sug"
        icon="search"
        ><p v-html="sug"></p
      ></van-cell>
    </van-cell-group>
    <!-- 搜索历史记录 -->
    <div class="history-box" v-else-if="historyList.length">
      <div class="head">
        <span>历史记录</span>
        <van-icon @click="delAll" name="delete"></van-icon>
      </div>
      <van-cell-group>
        <van-cell v-for="history in historyList" :key="history">
          <a @click="onSearch(history)" class="word_btn">{{ history }}</a>
          <van-icon
            @click="delHistory(history)"
            class="close_btn"
            slot="right-icon"
            name="cross"
          />
        </van-cell>
      </van-cell-group>
    </div>
  </div>
</template>

<script>
import { suggest } from '../../api/article'
const TT_SEA = 'TT_SEA'
// mock数据
// localStorage.setItem(TT_SEA, JSON.stringify(['小米', '新冠疫情', '华为']))
/**
 * 历史搜索记录存储到本地=》localStorage
 * 步骤：
 * 1. 设计数据结构=》['关键词1','关键词1'...]
 * 2. 获取数据并渲染
 * 3. 删除某一个历史记录
 * 4. 清空历史记录
 * 5. 每次搜索记录用户搜索的关键词
 */
export default {
  name: 'search-index',
  data () {
    return {
      // 搜索关键词
      keyWord: '',
      // 联想词列表
      suggestList: [],
      // 搜索历史记录
      historyList: JSON.parse(localStorage.getItem(TT_SEA)) || []
    }
  },
  /**
   * 联想词补全=》根据输入关键词=》查接口补全=》展示补全词的列表
   */
  watch: {
    keyWord () {
      this.timer && clearTimeout(this.timer)
      // 函数防抖：在一定时间内如果重复执行，取消上次的执行，重新计时
      // 延迟时间=》作用=》避免重复执行
      // 特点：延迟时间内不能保障定时任务至少执行一次
      // 实现：可以通过定时器
      // this.timer存储定时器任务ID=》取消任务需要
      this.timer = setTimeout(async () => {
        // 联想补全
        // console.log('输入的关键词', this.keyWord)
        /**
         * 1. 处理空数据的情况
         * 2. 不是空正常调用接口获取联想词列表
         */
        if (!this.keyWord) {
          // 清空上次联想词列表
          this.suggestList = []
          return
        }
        const { data } = await suggest(this.keyWord)
        console.log(data)
        this.suggestList = data.options.map((item) => item.toLowerCase().replace(this.keyWord, `<span>${this.keyWord}</span>`))
        // console.log(this.suggestList)
      }, 600)
    }
  },
  methods: {
    // 删除全部搜索历史记录数据
    delAll () {
      this.historyList = []
      localStorage.setItem(TT_SEA, null)
    },
    // 删除某个历史记录
    delHistory (key) {
      /**
       * 1. 获取删除项的索引
       * 2. 使用splice删除指定索引的值
       */
      // 内存删除
      const curIndex = this.historyList.findIndex((item) => item === key)
      this.historyList.splice(curIndex, 1)
      // 本地localStorage删除=> 同步最新数据
      localStorage.setItem(TT_SEA, JSON.stringify(this.historyList))
    },
    /**
     * 触发时机：
     * 1. PC端：回车键
     * 2. mobile端：软键盘确定
     * 3. 联想词点击触发
     */
    onSearch (val) {
      // console.log('当前输入的值：', val)
      // 存储用户搜索的关键词=》排重
      if (!this.historyList.includes(val)) {
        // 不存在=》存起来
        this.historyList.push(val)
        // 本地同步
        localStorage.setItem(TT_SEA, JSON.stringify(this.historyList))
      }
      // 跳转到搜索结果页面
      this.$router.push({ path: '/search/result', query: { q: val } })
    }
  }
}
</script>

<style scoped lang='less'>
// 联想词
.suggest-box {
  /deep/ .van-cell {
    padding: 10px 20px;
    color: #999;
    p {
      span {
        color: red;
      }
    }
  }
}
// 历史记录
.history-box {
  padding: 0 20px;
  .head {
    line-height: 36px;
    color: #999;
    text-align: left;
    .van-icon {
      font-size: 16px;
      float: right;
      margin-top: 10px;
    }
  }
  .van-cell {
    padding: 10px 0;
  }
  .word_btn {
    color: #3296fa;
  }
  .close_btn {
    margin-top: 5px;
    color: #999;
  }
}
</style>
